<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:c="livcos.org/ns/cosmos"
  xmlns:da="livcos.org/ns/cosmos/data-access"
  xmlns:px="livcos.org/ns/cosmos/proxy"
  xmlns:f="livcos.org/ns/xslt/function"
  exclude-result-prefixes="f c da px">
  
  <xsl:import href="../../style/base.xsl"/>
  
  <xsl:output method="text"/>

  <xsl:param name="ref" select="'/'"/>
  <xsl:param name="entities" select="'0'"/>
	
	<xsl:variable name="MAX_DETAILS_LENGTH" select="50"/>
  
  <xsl:template match="/">
    <xsl:variable name="objId">
      <xsl:choose>
        <xsl:when test="($ref = '/') or ($ref = '')">
          <xsl:text>/cosmos</xsl:text>
        </xsl:when>
        <xsl:when test="contains($ref, '#')">
          <xsl:value-of select="substring-before($ref, '#')"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:value-of select="$ref"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
    <xsl:text>[</xsl:text>
    <xsl:choose>
      <xsl:when test="($entities = '1') or contains($ref, '#')">
        <xsl:if test="doc-available(concat($objId,'.content'))">
          <xsl:apply-templates select="doc(concat($objId,'.content'))/*//@id"/>
        </xsl:if>
      </xsl:when>
      <xsl:otherwise>
        <xsl:if test="doc-available(concat($objId,'.meta2'))">
          <xsl:apply-templates select="document(concat($objId,'.meta2'))/*/c:*"/>
        </xsl:if>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text>]</xsl:text>
  </xsl:template>
  
  <xsl:template match="@id">
    <xsl:if test="position() > 1">,</xsl:if>
    <xsl:text>'</xsl:text>
    <xsl:value-of select="."/>
    <xsl:text>','</xsl:text>
    <xsl:apply-templates select=".." mode="details"/>
    <xsl:text>'</xsl:text>
  </xsl:template>
  
  <xsl:template match="*" mode="details">
  	<xsl:variable name="txt" select="normalize-space(replace(replace(., '''', '\\'''), '\n', ' '))"/>
  	<xsl:value-of select="substring($txt, 0, $MAX_DETAILS_LENGTH)"/>
  	<xsl:if test="string-length($txt) > $MAX_DETAILS_LENGTH">
      <xsl:text>...</xsl:text>
    </xsl:if>
  </xsl:template>
  
  <xsl:template match="*[*[local-name(.) = 'title']]" mode="details">
    <xsl:apply-templates select="*[local-name(.) = 'title'][1]" mode="#current"/>
  </xsl:template>
  
  <xsl:template match="c:*" mode="details">
    <xsl:choose>
      <xsl:when test="c:*">
        <xsl:value-of select="count(c:*)"/>
        <xsl:text> child object(s)</xsl:text>
      </xsl:when>
      <xsl:when test="da:folder/@count">
        <xsl:value-of select="da:folder/@count"/>
        <xsl:text> child object(s)</xsl:text>
      </xsl:when>
    	<xsl:when test="@content-type">
    		<xsl:value-of select="@content-type"/>
    		<xsl:text> content</xsl:text>
    	</xsl:when>
    	<xsl:when test="da:*[@content-type]">
    		<xsl:value-of select="da:*[@content-type][1]/@content-type"/>
    		<xsl:text> content</xsl:text>
    	</xsl:when>
    </xsl:choose>
  </xsl:template>
  
	<xsl:template match="c:*">
		<xsl:if test="position() > 1">,</xsl:if>
		<xsl:text>'</xsl:text>
		<xsl:value-of select="local-name(.)"/>
		<xsl:text>','</xsl:text>
		<xsl:apply-templates select="." mode="details"/>
		<xsl:text>'</xsl:text>
	</xsl:template>
  
</xsl:stylesheet>
